import { isNumber, isString } from '@vueuse/core'
import FileSaver from 'file-saver'
import * as XLSX from 'xlsx'
import XLSXS from 'xlsx-js-style'

// 導出Excel文件的方法
export function exportExcel(eleName, excelName) {
  /* generate workbook object from table */
  const xlsxParam = { raw: false } // 导出的内容只做解析，不进行格式转换
  // var table = document.querySelector(eleName).cloneNode(true)
  // table.removeChild(table.querySelector('.el-table__fixed')) //去掉固定的表格 比如操作欄
  // var wb = XLSX.utils.table_to_book(table, xlsxParam)

  let wb = XLSX.utils.book_new()
  let sheet = null
  // 判斷是否為全部導出
  if (Array.isArray(eleName)) {
    for (const item of eleName) {
      sheet = XLSX.utils.table_to_sheet(document.querySelector(item.eleName), xlsxParam)
      sheet['!cols'] = getXlsxw(item.eleName) //getXlsxw(item.eleName)
      XLSX.utils.book_append_sheet(wb, sheet, item.title)
    }
  } else {
    sheet = XLSX.utils.table_to_sheet(document.querySelector(eleName), xlsxParam)
    sheet['!cols'] = getXlsxw(eleName)
    console.log(sheet)
    XLSX.utils.book_append_sheet(wb, sheet, excelName.slice(12)) //yyyymmddhhmm表名
  }

  // 循环修改表格样式
  for (const key in wb.Sheets) {
    //修改所有金额右对齐
    for (const k in wb.Sheets[key]) {
      const td = wb.Sheets[key][k]
      if (td.v) {
        if (!k.startsWith('!') && isNumber(td.v)) {
          td.s = {
            font: {
              sz: 9
            }
          }
        } else {
          td.s = {
            font: {
              sz: 10
            }
          }
        }
      }
      if (!k.startsWith('!') && !k.startsWith('A') && !k.startsWith('C')) {
        try {
          let num = 0
          if (td.v.includes(',')) {
            num = Number(td.v.replace(/,/g, ''))
          } else num = Number(td.v)
          if (num || num >= 0) {
            td.s = {
              alignment: {
                horizontal: 'right'
              }
            }
          }
        } catch (error) {}
      }
      if (!k.startsWith('A') && td.v < 0) {
        td.s = {
          alignment: {
            horizontal: 'right'
          },
          font: {
            color: { rgb: 'ff0000' },
            sz: 9
          },
          numFmt: '#,##0.00_ ;-#,##0.00_ ;_* "-"??_ ;_ @_ '
        }
      }
      if (!k.startsWith('A') && (td.v > 0 || td.v == 0)) {
        td.s = {
          alignment: {
            horizontal: 'right'
          },
          font: {
            sz: 9
          },
          numFmt: '#,##0.00_ ;-#,##0.00_ ;_* "-"??_ ;_ @_ '
        }
      }
      if (!k.startsWith('A') && isString(td.v) && td.v.includes('del')) {
        td.v = td.v.replaceAll('del', '')
      }
    }

    // if (key == '明細分類賬表') {
    //   for (const k in wb.Sheets[key]) {
    //     // 非!开头的属性都是单元格
    //     if (!k.startsWith('!')) {
    //       // const td = wb.Sheets[key][k]
    //       // if (k.startsWith('C') && td.v.includes('(') && td.v.includes('.')) {
    //       //   td.s = {
    //       //     font: {
    //       //       color: { rgb: 'ff0000' }
    //       //     }
    //       //   }
    //       // }
    //       // if (k.startsWith('P') && td.v.includes('(')) {
    //       //   td.s = {
    //       //     alignment: {
    //       //       horizontal: 'right'
    //       //     },
    //       //     font: {
    //       //       color: { rgb: 'ff0000' }
    //       //     }
    //       //   }
    //       // }
    //     }
    //   }
    // }

    if (key == '資產負債表') {
      for (const k in wb.Sheets[key]) {
        if (!k.startsWith('!')) {
          const td = wb.Sheets[key][k]
          // if (!k.startsWith('A') && td.v < 0) {
          //   td.s = {
          //     alignment: {
          //       horizontal: 'right'
          //     },
          //     font: {
          //       color: { rgb: 'ff0000' }
          //     },
          //     numFmt: '#,##0.00_ ;-#,##0.00_ ;_* "-"??_ ;_ @_ '
          //   }
          // }
          // if (!k.startsWith('A') && (td.v > 0 || td.v == 0)) {
          //   td.s = {
          //     alignment: {
          //       horizontal: 'right'
          //     },
          //     numFmt: '#,##0.00_ ;-#,##0.00_ ;_* "-"??_ ;_ @_ '
          //   }
          // }

          // 添加上劃綫
          if (td.v == 'one') {
            const curLine = k.slice(1)
            wb.Sheets[key]['B' + curLine].s = {
              border: {
                top: {
                  style: 'thin',
                  color: { rgb: '000000' }
                }
              },
              font: {
                sz: 9
              },
              numFmt: '#,##0.00_ ;-#,##0.00_ ;_* "-"??_ ;_ @_ '
            }
            wb.Sheets[key]['D' + curLine].s = {
              border: {
                top: {
                  style: 'thin',
                  color: { rgb: '000000' }
                }
              },
              font: {
                sz: 9
              },
              numFmt: '#,##0.00_ ;-#,##0.00_ ;_* "-"??_ ;_ @_ '
            }
            td.v = ''
          }
          // 添加下劃綫
          if (td.v == 'two') {
            const curLine = k.slice(1)
            let jj = wb.Sheets[key]['C' + curLine].v

            if (jj < 0) {
              wb.Sheets[key]['C' + curLine].s = {
                border: {
                  bottom: {
                    style: 'double',
                    color: { rgb: '000000' }
                  }
                },
                alignment: {
                  horizontal: 'right'
                },
                font: {
                  color: { rgb: 'ff0000' },
                  sz: 9
                },
                numFmt: '#,##0.00_ ;-#,##0.00_ ;_* "-"??_ ;_ @_ '
              }
            } else {
              wb.Sheets[key]['C' + curLine].s = {
                border: {
                  bottom: {
                    style: 'double',
                    color: { rgb: '000000' }
                  }
                },
                alignment: {
                  horizontal: 'right'
                },
                font: {
                  sz: 9
                },
                numFmt: '#,##0.00_ ;-#,##0.00_ ;_* "-"??_ ;_ @_ '
              }
            }
            let pp = wb.Sheets[key]['E' + curLine].v

            if (pp < 0) {
              wb.Sheets[key]['E' + curLine].s = {
                border: {
                  bottom: {
                    style: 'double',
                    color: { rgb: '000000' }
                  }
                },
                alignment: {
                  horizontal: 'right'
                },
                font: {
                  color: { rgb: 'ff0000' },
                  sz: 9
                },
                numFmt: '#,##0.00_ ;-#,##0.00_ ;_* "-"??_ ;_ @_ '
              }
            } else {
              wb.Sheets[key]['E' + curLine].s = {
                border: {
                  bottom: {
                    style: 'double',
                    color: { rgb: '000000' }
                  }
                },
                alignment: {
                  horizontal: 'right'
                },
                font: {
                  sz: 9
                },
                numFmt: '#,##0.00_ ;-#,##0.00_ ;_* "-"??_ ;_ @_ '
              }
            }
            td.v = ''
          }
        }
      }
    }

    if (key == '損益表') {
      let lineOne = []
      let lineTwo = []
      let lineThree = []
      for (const k in wb.Sheets[key]) {
        // 非!开头的属性都是单元格
        if (!k.startsWith('!')) {
          const td = wb.Sheets[key][k]
          // 獲取需要添加樣式的行數
          if (td.v == 'lineOne') {
            lineOne.push(k.slice(1))
            td.v = ''
          }
          if (td.v == 'lineTwo') {
            lineTwo.push(k.slice(1))
            td.v = ''
          }
          if (td.v == 'lineThree') {
            lineThree.push(k.slice(1))
            td.v = ''
          }
          // if (!k.startsWith('A') && isString(td.v) && td.v.includes('(')) {
          //   td.s = {
          //     alignment: {
          //       horizontal: 'right'
          //     },
          //     font: {
          //       // 設置字體顔色 帶括號的數字(1,000.00)改成紅色
          //       color: { rgb: 'ff0000' }
          //     }
          //   }
          // }
          if (k.slice(1) == 5 || k.slice(1) == 6) {
            td.s = {
              alignment: {
                horizontal: 'center'
              },
              font: {
                sz: 9
              }
            }
          }
        }
      }
      for (const k in wb.Sheets[key]) {
        // 非!开头的属性都是单元格
        if (!k.startsWith('!')) {
          const td = wb.Sheets[key][k]
          if (!k.startsWith('A') && lineOne.includes(k.slice(1)) && td.v != '') {
            td.s = {
              alignment: {
                horizontal: 'right'
              },
              border: {
                top: {
                  style: 'thin',
                  color: { rgb: '000000' }
                },
                bottom: {
                  style: 'dashed',
                  color: { rgb: '000000' }
                }
              },
              font: {
                sz: 9
              },
              numFmt: '#,##0.00_ ;-#,##0.00_ ;_* "-"??_ ;_ @_ '
            }
          }
          if (!k.startsWith('A') && lineTwo.includes(k.slice(1)) && td.v != '') {
            td.s = {
              alignment: {
                horizontal: 'right'
              },
              border: {
                bottom: {
                  style: 'mediumDashDotDot',
                  color: { rgb: '000000' }
                }
              },
              font: {
                sz: 9
              },
              numFmt: '#,##0.00_ ;-#,##0.00_ ;_* "-"??_ ;_ @_ '
            }
          }
          if (!k.startsWith('A') && lineThree.includes(k.slice(1)) && td.v != '') {
            td.s = {
              alignment: {
                horizontal: 'right'
              },
              border: {
                bottom: {
                  style: 'double',
                  color: { rgb: '000000' }
                }
              },
              font: {
                sz: 9
              },
              numFmt: '#,##0.00_ ;-#,##0.00_ ;_* "-"??_ ;_ @_ '
            }
          }
        }
      }
    }
    if (
      key == '日記賬表' ||
      key == '銷售及應收款日記賬表' ||
      key == '現金支出日記賬表' ||
      key == '現金收款日記賬表'
    ) {
      console.log('keykey==')
      console.log(key)
      for (const k in wb.Sheets[key]) {
        // 非!开头的属性都是单元格
        if (!k.startsWith('!')) {
          const td = wb.Sheets[key][k]
          //Gk.startsWith('F') &&
          if (k.startsWith('D') && isNumber(td.v)) {
            let str = td.v.toString()
            str.replaceAll(',', '')
            str.replaceAll('.', '')
            td.v = str
            td.s = {
              alignment: {
                horizontal: 'left'
              }
            }
          }
        }
      }
    }
  }

  /* get binary string as output */
  var wbout = XLSXS.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' })
  try {
    FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), `${excelName}.xlsx`)
  } catch (e) {
    if (typeof console !== 'undefined') {
      console.log(e, wbout)
    }
  }
  return wbout
}
//返回表格宽度
export function getXlsxw(idName) {
  const xlsxW = []
  //明细分类表

  for (let i = 0; i < 25; i++) {
    let item1 = { wpx: 80 }
    let item2 = { wpx: 170 }
    if (idName == '#detail') {
      if (i == 4 || i == 3) xlsxW.push(item2)
      else xlsxW.push(item1)
    } else if (idName == '#trial') {
      if (i == 1) xlsxW.push(item2)
      else xlsxW.push(item1)
    } else if (idName == '#balance' || idName == '#gainLoss') {
      if (i == 0) xlsxW.push({ wpx: 400 })
      else xlsxW.push(item1)
    } else if (
      idName == '#dialy' ||
      idName == '#dialySj' ||
      idName == '#dialyCd' ||
      idName == '#dialyCr'
    ) {
      console.log(idName)
      if (i == 4) xlsxW.push({ wpx: 200 })
      else if (i == 7) xlsxW.push({ wpx: 300 })
      else xlsxW.push(item1)
    } else if (i > 5) xlsxW.push(item2)
    else xlsxW.push(item1)
  }
  // } else if (idName == '#trial') {
  //   //试平衡表
  //   for (let i = 0; i < 25; i++) {
  //     let item1 = { wpx: 80 }
  //     let item2 = { wpx: 170 }
  //     if (i == 1) xlsxW.push(item2)
  //     else xlsxW.push(item1)
  //   }
  // } else {
  //   for (let i = 0; i < 25; i++) {
  //     let item1 = { wpx: 50 }
  //     let item2 = { wpx: 130 }
  //     if (i < 5) xlsxW.push(item1)
  //     else xlsxW.push(item2)
  //   }
  // }
  return xlsxW
}
